The security of a computer implemented system depends on multiple factors. On the one hand there is the security of the underlying abstract protocol and cryptography. Once the cryptography employed is broken, the system will typically also be broken. On the other hand there is the security related to the implementation itself.
For example, it has long been known that computer systems leak some information through so-called side-channels. Observing the input-output behavior of a computer system may not provide any useful information on sensitive information, such as secret keys used by the computer system. But a computer system has other channels that may be observed, e.g., its power consumption or electromagnetic radiation; these channels are referred to as side-channels. For example, small variations in the power consumed by different instructions and variations in power consumed while executing instructions may be measured. The measured variation may be correlated to sensitive information, such as cryptographic keys. This additional information on secret information, beyond the observable and intended input-output behavior are termed side-channels. Through a side-channel a computer system may ‘leak’ secret information during its use. Observing and analyzing a side-channel may give an attacker access to better information than may be obtained from cryptanalysis of input-output behavior only. One known type of side-channel attack is the so-called differential power analysis (DPA).
There are other ways to attack a system. Related to the classic side-channel attack, are fault injection attacks. Here the underlying hardware is intentionally made to malfunction. Due to the malfunction the device will produce wrong answers. If the particular type of errors is related to secret information, then analyzing the errors may disclose secret information. In particular, light attacks also known as flash attacks are a particular powerful way to inject faults. In a light attack laser light is flashed on a circuit during computation to disrupt intermediate values.
For example, a known attack to the RSA signature algorithm injects transient faults in the target machine by regulating the voltage supply of the system. Attackers do not need access to the internal components of the victim chip, they simply collect corrupted signature outputs from the system while subjecting it to transient faults. Once a sufficient number of corrupted messages have been collected, the private key can be extracted through offline analysis.
One way to counter fault attacks is to verify the computations. For example, by performing critical computations twice. In the particular case of RSA signatures, the signature may be verified by the RSA verification algorithm. In this way a fault attack is detected and it is avoided that erroneous values leave the computing device.
An even stronger attack on a computer is so called reverse engineering. In many security scenarios attackers may have full access to the computer. This gives them the opportunity to disassemble the program and obtain any information about the computer and program. Given enough effort any key hidden say in a program may be found by an attacker.
Protecting against this attack scenario has proven very difficult. One type of counter measure is so-called white-box cryptography. In white-box cryptography, the key and algorithm are combined. The resulting algorithm only works for one particular key. Next the algorithm may be implemented as a so-called, lookup table network. Computations are transformed into a series of lookups in key-dependent tables. See for example, “White-Box Cryptography and an AES Implementation”, by S. Chow, P. Eisen, H. Johnson, P. C. van Oorschot, for an example of this approach.
Both implementations of functionality in computer hardware and computer software are vulnerable to the above side-channel attacks. The problem is however most severe in software. Compared to hardware implementations, software is relatively slow and consumes a relatively large amount of power. Both factors favor side-channel attacks.
Attempts have been made to increase the resistance of computer programs against side-channel attacks by changing their compilation.
U.S. Pat. No. 7,996,671 suggests increasing the resistance of computer programs against side-channel attacks by improved compilation. Since power analysis attacks rely on measured power consumption, resistance is increased by compiling so as to reduce power consumption. The compiler predicts the compilation that is the most energy efficient and selects it. It is observed that energy consumption reduction increases the power noise/variation and improves side-channel resistance.
If the energy reduction approach alone is not enough to introduce enough power noise/variation, then the compiler approach that is used for energy optimization can be used to randomize the power cost in critical portions of codes such as cryptographic algorithms. This is accomplished at compile time by deliberately generating code with different power requirements.
Current approaches to the side-channel problem that introduce randomness in the computation have proved less than satisfactory.